package com.utn.disenio.entrega2;

import java.util.ArrayList;
import java.util.Calendar;

import com.utn.disenio.entrega1.Flexible;

public class SistemaAterrizarPuntoCom {
	
	private static SistemaAterrizarPuntoCom uniqueInstance;
	
	ArrayList<Aerolineas> aerolineas;
	
	
	private SistemaAterrizarPuntoCom()
	{
		this.aerolineas = new ArrayList<Aerolineas>();
		this.aerolineas.add(new AerolineaLanchitaAdapter());
	}
	
	public void setAerolineas(ArrayList<Aerolineas> aerolineas)
	{
		this.aerolineas = aerolineas;
	}
	
    public static SistemaAterrizarPuntoCom getInstance() {
        if (uniqueInstance == null) 
        {
            uniqueInstance = new SistemaAterrizarPuntoCom();
        }
        return uniqueInstance;
    }
	
	public ArrayList<Asiento> buscarAsientos(String origen, String destino, String salida, String horaSalida, String llegada, String horaLlegada, Usuario usuario) throws Exception
	{
		/* Valido que las fechas sean como quiero, a partir del manejo de fechas de la entrega 1 */
		
	     	Flexible fechaFlexS = new Flexible(salida);
			Flexible fechaFlexLL = new Flexible(llegada);
			String fechaSalida;
			String fechaLlegada;
			if((Integer.toString((fechaFlexLL.getFecha().get(Calendar.YEAR))) + Integer.toString((fechaFlexLL.getFecha().get(Calendar.MONTH)+1)) + Integer.toString((fechaFlexLL.getFecha().get(Calendar.DAY_OF_MONTH)))) == "999999999")
			{
				fechaLlegada = null;
			}
			else
			{
				fechaLlegada = (Integer.toString((fechaFlexLL.getFecha().get(Calendar.YEAR))) + Integer.toString((fechaFlexLL.getFecha().get(Calendar.MONTH)+1)) + Integer.toString((fechaFlexLL.getFecha().get(Calendar.DAY_OF_MONTH))));
			}
			
			if((Integer.toString((fechaFlexS.getFecha().get(Calendar.YEAR))) + Integer.toString((fechaFlexS.getFecha().get(Calendar.MONTH)+1)) + Integer.toString((fechaFlexS.getFecha().get(Calendar.DAY_OF_MONTH)))) == "999999999")
			{
				fechaSalida = null;
			}
			else
			{
				fechaSalida = (Integer.toString((fechaFlexS.getFecha().get(Calendar.YEAR))) + Integer.toString((fechaFlexS.getFecha().get(Calendar.MONTH)+1)) + Integer.toString((fechaFlexS.getFecha().get(Calendar.DAY_OF_MONTH))));
			}
			
				
			/* Arreglo la hora que me llega de a cuerdo al formato de la entrega 2*/	
			
	     	Hora tipoHoraS = new Hora(horaSalida);
			Hora tipoHoraLl = new Hora(horaLlegada);
			String horaS = tipoHoraS.hora;
			String horaLl = tipoHoraLl.hora;
			
			ArrayList<Asiento> asientos = new ArrayList<Asiento>();
			for(Aerolineas unaAerolinea: aerolineas)
			{
				asientos.addAll(unaAerolinea.buscarAsientos(origen, destino, fechaSalida , horaS, fechaLlegada, horaLl, usuario));
			}
			return asientos;
	}
			
	public float comprar(Asiento asiento, Usuario usuario) throws Exception
	{
		asiento.getAerolinea().comprar(asiento);
		float precioTotal = (asiento.getPrecio()*((asiento.getAerolinea().getPorcentajeImpuesto()/100) + 1)) + usuario.impuestoAdicional();
	
		return precioTotal;
	}

}
